<?php

/**
 * This is the model class for table "{{option}}".
 *
 * The followings are the available columns in table '{{option}}':
 * @property string $id
 * @property string $name
 * @property string $value
 * @property string $data_type
 * @property string $description
 * @property integer $rank
 * @property integer $language_id
 * @property string $category
 */
class Option extends MyARContent
{

    const TYPE_ON = 1;
    const TYPE_OF = 0;

    /**
     * Returns the static model of the specified AR class.
     * @param string $className active record class name.
     * @return Option the static model class
     */
    public static function model($className = __CLASS__)
    {
        return parent::model($className);
    }

    /**
     * @return string the associated database table name
     */
    public function tableName()
    {
        return '{{option}}';
    }

    /**
     * @return array validation rules for model attributes.
     */
    public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('rank, language_id', 'numerical', 'integerOnly' => true),
            array('name', 'length', 'max' => 64),
            array('data_type', 'length', 'max' => 20),
            array('description', 'length', 'max' => 255),
            array('category', 'length', 'max' => 30),
            array('value', 'safe'),
            // The following rule is used by search().
            // Please remove those attributes that should not be searched.
            array('id, name, value, data_type, description, rank, language_id, category', 'safe', 'on' => 'search'),
        );
    }

    /**
     * @return array relational rules.
     */
    public function relations()
    {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        $ret = parent::relations();
        return $ret;
    }

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels()
    {
        $array = array(
            'id' => 'ID',
            'name' => 'Name',
            'value' => 'Value',
            'data_type' => 'Data Type',
            'description' => 'Description',
            'rank' => 'Rank',
            'language_id' => 'Language',
            'category' => 'Category',
        );
        foreach ($array as $key => $val)
        {
            $array[$key] = Yii::t('option', $val);
        }

        return $array;
    }

    /**
     * Retrieves a list of models based on the current search/filter conditions.
     * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
     */
    public function search()
    {
        // Warning: Please modify the following code to remove attributes that
        // should not be searched.

        $criteria = new CDbCriteria;

        $criteria->compare('id', $this->id, true);
        $criteria->compare('name', $this->name, true);
        $criteria->compare('value', $this->value, true);
        $criteria->compare('data_type', $this->data_type, true);
        $criteria->compare('description', $this->description, true);
        $criteria->compare('rank', $this->rank);
        $criteria->compare('language_id', $this->language_id);
        $criteria->compare('category', $this->category, true);

        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
        ));
    }

    /**
     * Lấy danh sách các loại cài đặt được hỗ trợ
     * @return array
     */
    public static function getArrayCategory()
    {
        return array(
            'general' => Yii::t('option', 'General'),
//            'post' => Yii::t('option', 'Seo'),
//            'contact' => Yii::t('option', 'Contact'),
//            'option' => Yii::t('option', 'Home setting'),
        );
    }

    /**
     * Lấy tên của đối tượng, phục vụ cho việc ghi log
     * @return string
     */
    public function getObjectName()
    {
        return $this->description;
    }

    static public function getItem($itemName, $category = 'auto')
    {
        $item = self::model()->find(array("condition" => "name=:n AND language_id=:i ",
            'params' => array(
                ":n" => $itemName,
                ":i" => Yii::app()->controller->lang_id,
        )));

        // Trường hợp item không tồn tại, trả về NULL
        if ($item == NULL)
        {
//            $option = new Option();
//            $option->category = $category;
//            $option->name = $itemName;
//            $option->description = "$category $itemName";
//            $option->value = '';
//            $option->data_type = 'text';
//            $option->language_id = Language::getCurrentLangID();
//            $option->save();
            return NULL;
        }
        else
        {
            switch ($item->data_type)
            {
                case "array":
                    // Trường hợp option là một mảng đã được serialize
                    $data = @unserialize($item->value);
                    if ($data)
                        return $data;
                    else
                        return array();
                    break;

                default:
                    return $item->value;
                    break;
            }
        }
    }

    /**
     * Lấy danh sách các loại dữ liệu được hỗ trợ
     * @return array
     */
    public static function getArrayType()
    {
        return array(
            'text' => Yii::t('option', 'Text'),
            'textArea' => Yii::t('option', 'Text Area'),
            'editor' => Yii::t('option', 'Editor'),
            'datatable' => Yii::t('option', 'Data table'),
            'image' => Yii::t('option', 'Image'),
            'date' => Yii::t('option', 'Date'),
            'number' => Yii::t('option', 'Number'),
            'tags' => Yii::t('option', 'Tags'),
            'alpha' => Yii::t('option', 'Alpha'),
            'alphanumeric' => Yii::t('option', 'Alphanumeric'),
            'post' => Yii::t('option', 'Choose post'),
            'category' => Yii::t('option', 'Choose category'),
            'onof' => Yii::t('option', 'On/Of'),
//            'category_album' => Yii::t('option', 'Choose category album'),
        );
    }

    public static function settingUrl()
    {
        return Yii::app()->controller->createUrl("option/", array(
                    'lang' => Yii::app()->language
        ));
    }

    public static function getOnOf()
    {
        return array(
            self::TYPE_OF => 'Tắt',
            self::TYPE_ON => 'Bật',
        );
    }

}